package String;

/**
 * 字符串
 */
public class StringDemo {
    public static void main(String[] args) {
        String str1 = "Hello World";
        String str2 = "Hello World";
        System.out.println("str1:"+str1);
        System.out.println("str2:"+str2);
        System.out.println(str1 == str2);

        String str3 = "Hello World";
        System.out.println("str3:" + str3);
        System.out.println(str1 == str3);

        // new创建新的对象，不推荐这样创建字符串
        String str4 = new String("Hello world");
        System.out.println("str4:" + str4);
        System.out.println(str1 == str4);

        // 使用+拼接会创建新的对象
        str1 = str1 + "!"; // 字符串是不变对象，修改会创建新的对象，引用地址不同
        System.out.println("str1:" + str1);
        System.out.println(str1 == str2);

        String str5 = "Hello" + " World";
        System.out.println("str5:" + str5);
        // 结果是true, 因为编译器优化，会进行预编译，触发了预计算
        System.out.println(str1 == str5);

        // 如果是变量拼接，那么就不会进行预计算
        String str6 = "Hello";
        str6 = str6 + " World";
        System.out.println("str6:" + str6);
        System.out.println(str2 == str6);





    }
}
